//20210807
/**
 * 比较版本号
 * 给你两个版本号 version1 和 version2 ，请你比较它们。

    版本号由一个或多个修订号组成，各修订号由一个 '.' 连接。每个修订号由 多位数字 组成，可能包含 前导零 。每个版本号至少包含一个字符。修订号从左到右编号，下标从 0 开始，最左边的修订号下标为 0 ，下一个修订号下标为 1 ，以此类推。例如，2.5.33 和 0.1 都是有效的版本号。

    比较版本号时，请按从左到右的顺序依次比较它们的修订号。比较修订号时，只需比较 忽略任何前导零后的整数值 。也就是说，修订号 1 和修订号 001 相等 。如果版本号没有指定某个下标处的修订号，则该修订号视为 0 。例如，版本 1.0 小于版本 1.1 ，因为它们下标为 0 的修订号相同，而下标为 1 的修订号分别为 0 和 1 ，0 < 1 。

    返回规则如下：

    如果 version1 > version2 返回 1，
    如果 version1 < version2 返回 -1，
    除此之外返回 0。
*/

//思路错误：
//正向循环对比，大于可以直接返回，小于或等于要到最后一层
//难点，如何比较
//因为有多层，需要从下往上比较

//正确的难点：
//如何把001转成1：用parseInt或者number
//如何比较：正向比较即可，大于或者小于都直接返回值，否则继续，最后返回0
//长度不一怎么办：取较大值的长度


/**
 * 自解：从下往上比，比较的值是有大或者小的直接覆盖之前的值，要是相等就不覆盖
 * 复杂度分析
 * N,M指的是输入数组
 * 时间复杂度：O(N+M+max(N,M))
 * 空间复杂度：O(N+M)
 * @param {string} version1
 * @param {string} version2
 * @return {number} 大于为1，小于为-1，其它为0
 */
 var compareVersion = function(version1, version2) {
     //把字符串根据.分割为数组
    let v1=version1.split(".");
    let v2=version2.split(".");
    let i=Math.max(v1.length, v2.length);//获取最大的长度
    //默认结果为0
    let rs=0;
    while(i>=0){
        const num1=Number(v1[i]||0);
        const num2=Number(v2[i]||0);
       
        if(num1>num2){
            rs=1;
        }else if(num1<num2){
            rs=-1;
        }else{
            rs=rs || 0;
        }
        //console.log(i,v1[i],num1,v2[i],num2,rs);
        i--;
    }
    return rs;
};

//const v=["1","1.0.1"];

//console.log(compareVersion(v[0],v[1]));


/**
 * leetcode题解：从左往右比，大或者小就直接返回，否则继续
 * N,M指的是输入数组
 * 时间复杂度：O(N+M+max(N,M))
 * 空间复杂度：O(N+M)
 * @param {string} version1
 * @param {string} version2
 * @return {number} 大于为1，小于为-1，其它为0
 */
 var compareVersion2 = function(version1, version2) {
    //把字符串根据.分割为数组
   let v1=version1.split(".");
   let v2=version2.split(".");
   let total=Math.max(v1.length, v2.length);//获取最大的长度
  
   for (let index = 0; index < total; index++) {
    const num1=Number(v1[index]||0);
    const num2=Number(v2[index]||0);
   
    if(num1>num2){
        return 1;
    }else if(num1<num2){
       return -1;
    }
   }
       

   return 0;
};

const v=["1.0.1","1.0.1"];

console.log(compareVersion2(v[0],v[1]));

/**
 * 还有一个更好的方法，比较复杂，后续有空再研究
 * 时间复杂度：O(max(N,M))。其中 N 和 M 指的是输入字符串的长度。
空间复杂度：O(1)，没有使用额外的数据结构。

 */